int[] til byte[]

Tags:    c#

jeg har en array af ints, og jeg skal bruge den som en byte array.

Grunden er at den skal i noget GZip ting ting (jeg har ikke helt styr på det)

kode:
Fold kodeboks ind/udCSharp kode 

ville sådan noget som
Fold kodeboks ind/udCSharp kode 

virke?
Jeg aner ikke hvordan BitConverter fungere <,<
nogen forslag til hvordan jeg får det her fixet?
eller nogen som vil sige at jeg spørger om noget komplet umuligt?
eller nogen som bare har lyst til at skrive noget?



9 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Dit problem i en nøddeskal er, at nogle funktioner - eksempelvis zipning eller kryptering - arbejder på byte[]. Tænk på det som en klat hukommelse: funktionen ved ikke og vil heller ikke vide om den klat hukommelse du stikker i hovedet på den er integers, strings eller en blanding af det hele.

Det du skal gøre, er at kunne serialisere dine data og tilsvarende deserialisere data igen. I tilfældet med et int[], så har du et array af 32 bit tal, dvs hvert integer skal laves om til 4 bytes. Din int[] bliver dermed til en byte[] som er 4 gange længere. Der skal lidt simpel bit-gymnastik til ved både serialisering og deserialisering.

I rå C/C++ kan man caste memory direkte - det er ikke helt ligetil i C#.



Jeg er ikke lige helt med på det, men du skal ikke bare lave en Convert.ToBytes(blocks); ?



kan man bare det?

mini example:
Fold kodeboks ind/udCSharp kode 

er det det du siger?



Indlæg senest redigeret d. 22.08.2011 22:24 af Bruger #16191
Fold kodeboks ind/udCSharp kode 




Indlæg senest redigeret d. 22.08.2011 23:31 af Bruger #16594
men der er variabler i min "myArray" som er over 255, kan man så det her?

eller

kan man komprimere text på en anden måde?
eller bruge GZip med en int[]



men der er variabler i min "myArray" som er over 255, kan man så det her?

eller

kan man komprimere text på en anden måde?
eller bruge GZip med en int[]


Hej.

Når du konverterer fra en datatype til en anden kan data gå tabt ved konverteringen således:

Fold kodeboks ind/udCSharp kode 


Resultatet af myByte = 255. Det er fordi størrelsen af en "byte" er mindre end størrelsen af en "int".

/Kent







sååå hvad gør jeg? :S

jeg kom lige til at tænke på, om man kan gøre sådan her:
Fold kodeboks ind/udCSharp kode 




Indlæg senest redigeret d. 23.08.2011 15:00 af Bruger #16191
Det ser ok ud såfremt dine x,y,z altid er under 16 bit

Men hvad med rotx og roty? er 1 byte nok til dem?



ja rotx og roty er bytes =)



t